<?php
header("content-type:text/html;charset=utf-8");
include_once "../config/config.php";
class File extends config{
    //定义保存错误信息的属性
    public $upload_msg = "";
    /**
     * 功能：返回操作信息
     * 方法名：getMsg()
     * 参数： @param string $msg 信息
     *       @param bool   $flag ：true表示成功信息，false表示失败信息
     * 返回值：无
     */
    public function getMsg($msg,$flag=false){
        //判断$flag来确定要返回成功信息还是失败信息
        $this->upload_msg .=  $flag ? "√{$msg} | " : "×{$msg} | ";
    }
    /**
     * 功能：上传文件
     * 方法名:upload()
     * 参数：@param Array $file  上传的文件数组
     *返回值：成功返回上传的文件路径，上传失败返回false
     */
    public function upload($file){
        #判断当前是否有上传的文件
        if ($file == ""){
            $this->getMsg("没有接收到文件，请重写上传！");
            return false;
        }
        #判断上传到服务器时是否产生错误
        if ($file['error'] > 0) {
            $error = "";
            switch ($file['error']) {
                case 1 :
                    $error = "文件上传超过了PHP配置文件的指定upload_max_filesize的值";
                    break;
                case 2 :
                    $error = "上传的文件超过了表单约定的值：MAX_FILE_SIZE";
                    break;
                case 3 :
                    $error = "文件部分上载";
                    break;
                case 4 :
                    $error = "没有上传任何文件";
                    break;
                default :
                    $error = "未知错误";
            }
            $this->getMsg("{$error}，请重新上传");
            return false;
        }
        #判断上传的目标目录是否存在
        #处理文件路径
        $new_path = $this->file["path"];
        $new_path_port = strpos($new_path,"/");
        if($new_path_port == 0){
            $new_path = substr_replace($new_path,$_SERVER['DOCUMENT_ROOT']."/",0,1);
        }
        if (!file_exists($new_path) || !is_dir($new_path)) {
            $res = mkdir($new_path);
            if($res){
                $this->getMsg("目录\"{$new_path}\"创建成功");
            }else{
                $this->getMsg("目录\"{$new_path}\"创建失败");
                return false;
            }
        }
        #判断上传的文件大小是否是允许的判断
        if ($file['size'] > $this->file["size"]) {
            $this->getMsg("您上传的文件大小为{$file['size']}，已经超过了允许上传的文件大小");
            return false;
        }
        #判断上传的文件是否是允许上传的类型
        $filetype = pathinfo($file["name"]);
        $ex = $filetype['extension'];
        if (!in_array($ex, $this->file["allow_type"])) {
            $this->getMsg("您上传的文件文件类型为{$ex}，不允许上传");
            return false;
        }
        #为了系统安全，也为了同名文件不被覆盖，上传后将文件的名称修改为新名称
        $filename = date("YmdHis") . rand(100, 999) . "." . $ex;
        #判断是否是http post 上传的文件
        if (is_uploaded_file($file['tmp_name'])) {
            //如果是则可以移动
            $file_name = $new_path . DIRECTORY_SEPARATOR . $filename;
            $file_name = str_replace(DIRECTORY_SEPARATOR,"/",$file_name);
            if (move_uploaded_file($file['tmp_name'], $file_name)) {
                $this->getMsg("{$file['name']}上传成功，文件位置：{$file_name}");
                return $file_name;
            } else {
                $this->getMsg("上传{$file['name']}文件失败！！");
                return false;
            }
        } else {
            $this->getMsg("上传的{$file['name']}不是一个合法文件");
            return false;
        }
    }
}

$upload = new File();

